% 假设参数
num_weights = 16;            % 权重数量
P_initial = eye(num_weights);  % 初始协方差矩阵
a_initial = rand(num_weights, 2);  % 初始权重
O_k = eye(num_weights);      % 雅可比矩阵（简化为单位矩阵）
R_k = 1;                     % 观测噪声协方差
Q_k = 0.01 * eye(num_weights);  % 过程噪声协方差

% 初始化
a = a_initial;
P = P_initial;
e = zeros(num_weights, 2);  % 初始估计误差
E_previous=e'*P*e;

% 模拟EKF更新
for k = 1:100  % 假设有100个时间步
    % 假设观测模型和噪声
    z = a + normrnd(0, sqrt(R_k));
    % 计算卡尔曼增益
    K_k = P * O_k' / (R_k + O_k * P * O_k');
     % 更新权重
    e = z - O_k * a;
    a = a + K_k * e;
    % 更新协方差矩阵
    P = (eye(num_weights) - K_k * O_k) * P;
    % 收敛性分析
    e_a = a - a_initial;  % 权重估计误差
    E_k = e_a' * P * e_a;
    % 检查收敛性
    if k > 1
        if E_k > E_previous
            disp('Convergence condition not satisfied.');
            break;
        end
    end
    E_previous = E_k;
end